package main

import (
	"net/http"
	"shopback/handlers"
	"shopback/models"

	_ "shopback/docs" // 导入生成的Swagger文档

	"github.com/gorilla/mux"
	"github.com/rs/cors"
	httpSwagger "github.com/swaggo/http-swagger"
)

func main() {
	// 初始化数据库和数据
	models.InitDB()
	models.InitData()

	// 创建路由
	r := mux.NewRouter()

	// 用户相关路由
	r.HandleFunc("/register", handlers.Register).Methods("POST")            // 用户注册
	r.HandleFunc("/login", handlers.Login).Methods("POST")                  // 用户登录
	r.HandleFunc("/users/{id}", handlers.GetUser).Methods("GET")            // 获取用户信息
	r.HandleFunc("/users/{id}", handlers.DeleteUser).Methods("DELETE")      // 删除用户
	r.HandleFunc("/users/{id}", handlers.UpdateUser).Methods("PUT")         // 更新用户信息
	r.HandleFunc("/send-code", handlers.SendCode).Methods("POST")           // 发送验证码
	r.HandleFunc("/reset-password", handlers.ResetPassword).Methods("POST") // 重置密码

	// 地址相关路由
	r.HandleFunc("/users/{user_id}/addresses", handlers.AddAddress).Methods("POST")
	r.HandleFunc("/users/{user_id}/addresses", handlers.GetUserAddresses).Methods("GET")
	r.HandleFunc("/users/{user_id}/addresses/{address_id:[0-9]+}", handlers.GetUserAddressByID).Methods("GET")
	r.HandleFunc("/users/{user_id}/addresses/{address_id}", handlers.UpdateAddress).Methods("PUT")
	r.HandleFunc("/users/{user_id}/addresses/{address_id}", handlers.DeleteAddress).Methods("DELETE")

	// 商品相关路由
	r.HandleFunc("/products/search", handlers.SearchProducts).Methods("GET") // 搜索商品
	r.HandleFunc("/products/{id:[0-9]+}", handlers.GetProductByID).Methods("GET")   // 根据商品 ID 获取商品
	r.HandleFunc("/products", handlers.AddProduct).Methods("POST")           // 添加商品
	r.HandleFunc("/products/{id}", handlers.DeleteProduct).Methods("DELETE") // 删除商品
	r.HandleFunc("/products/type", handlers.GetProductsByType).Methods("GET")
	r.HandleFunc("/products", handlers.GetAllProducts).Methods("GET")

	// 收藏夹相关路由
	r.HandleFunc("/favorite/{user_id}", handlers.GetFavorite).Methods("GET")
	r.HandleFunc("/favorite/{user_id}/products/{product_id}", handlers.AddToFavorite).Methods("POST")
	r.HandleFunc("/favorite/{user_id}/products/{product_id}", handlers.DeleteFromFavorite).Methods("DELETE")

	// 评论相关路由
	r.HandleFunc("/comments", handlers.AddComment).Methods("POST")
	r.HandleFunc("/products/{product_id}/comments", handlers.GetProductComments).Methods("GET")
	r.HandleFunc("/comments/{comment_id}/users/{user_id}", handlers.DeleteComment).Methods("DELETE")

	// 购物车相关路由
	r.HandleFunc("/carts/{user_id}", handlers.GetCart).Methods("GET")                              // 获取购物车
	r.HandleFunc("/carts/{user_id}/items", handlers.AddToCart).Methods("POST")                     // 向购物车添加商品
	r.HandleFunc("/carts/{user_id}/items/{product_id}", handlers.DeleteFromCart).Methods("DELETE") // 从购物车删除商品
	r.HandleFunc("/carts/{user_id}/items/{product_id}", handlers.UpdateCartItem).Methods("PUT")

	// 订单相关路由
	r.HandleFunc("/orders/{user_id}", handlers.GetOrder).Methods("GET")
	r.HandleFunc("/orders/{user_id}/items", handlers.AddOrder).Methods("POST")
	// r.HandleFunc("/orders/{user_id}/items/{product_id}", handlers.DeleteOrder).Methods("DELETE")
	r.HandleFunc("/orders/{user_id}/latest", handlers.GetLatestOrder).Methods("GET")
	r.HandleFunc("/orders/{user_id}/items/{order_id}", handlers.GetOrderByID).Methods("GET")
	r.HandleFunc("/orders/{order_id}/pay", handlers.PayOrder).Methods("POST")
	r.HandleFunc("/orders/{user_id}/all", handlers.GetAllOrders).Methods("GET")
	r.HandleFunc("/orders/comment-status/{user_id}/{product_id}/{order_id}", handlers.UpdateCommentStatus).Methods("PUT")

	// 配置 CORS 策略
	c := cors.New(cors.Options{
		AllowedOrigins: []string{"http://localhost:5173"}, // 前端的 URL
		AllowedMethods: []string{"GET", "POST", "DELETE", "PUT"},
		AllowedHeaders: []string{"Content-Type", "Authorization"},
	})

	// 添加 Swagger UI 路由
	r.PathPrefix("/swagger/").Handler(httpSwagger.WrapHandler)

	// 使用 CORS 中间件
	handler := c.Handler(r)

	// 启动 HTTP 服务器，使用经过 CORS 处理的 handler
	http.ListenAndServe(":8080", handler)
}
